home *** CD-ROM | disk | FTP | other *** search
/ Hackers Handbook - Millenium Edition / Hackers Handbook.iso / files / c_scripts / spider.c < prev    next >
C/C++ Source or Header  |  1998-12-05  |  3KB  |  145 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <dirent.h>
  4. #include <stdlib.h>
  5. #include <sys/types.h>
  6. #include <unistd.h>
  7.  
  8. typedef struct dir_node
  9. {
  10.     char    name[256];
  11.     struct dir_node *next;
  12. }_dir_node;
  13.  
  14. typedef struct file_node
  15. {
  16.     char    name[256];
  17.     struct file_node *next;
  18. }_file_node;
  19.  
  20. struct dir_node      *dir_ll  = NULL;
  21. struct file_node     *file_ll = NULL;
  22.  
  23. void add_dir(char *dir_to_add)
  24. {
  25.     struct dir_node *new_node, *cur_node = dir_ll;
  26.  
  27.     new_node = (struct dir_node*)calloc(sizeof(struct dir_node),1);
  28.     sprintf(new_node->name,"%s",dir_to_add);
  29.     new_node->next = NULL;
  30.     
  31.     if(cur_node == NULL)
  32.     {
  33.         dir_ll = new_node;
  34.         return;
  35.     }
  36.     while(cur_node->next)
  37.         cur_node = cur_node->next;
  38.     cur_node->next = new_node;
  39. }
  40.  
  41. void add_file(char *file_to_add)
  42. {
  43.     struct file_node *new_node, *cur_node = file_ll;
  44.     char *str_ptr;
  45.     int i,length = strlen(file_to_add);
  46.     
  47.     for(i=length-1;i>0;i--)
  48.     {
  49.         if(file_to_add[i] == '.')
  50.         {
  51.             str_ptr = &(file_to_add[i]);
  52.             if(!strcmp(str_ptr,".html"))
  53.                 break;
  54.             else
  55.                 return;
  56.         }
  57.     }
  58.     if(i<0||i==0)
  59.         return;
  60.  
  61.     new_node = (struct file_node*)calloc(sizeof(struct file_node),1);
  62.     sprintf(new_node->name,"%s",file_to_add);
  63.     new_node->next = NULL;
  64.     
  65.     if(cur_node == NULL)
  66.     {
  67.         file_ll = new_node;
  68.         return;
  69.     }
  70.     while(cur_node->next)
  71.         cur_node = cur_node->next;
  72.     cur_node->next = new_node;
  73. }
  74.  
  75. void split_dir(char *dir_name)
  76. {
  77.     DIR *base_dir, *test_dir;
  78.     struct dirent *entry;
  79.     char *filename,complete_path[128];
  80.  
  81.     if(!dir_name || !*dir_name)
  82.         return;
  83.     if(!(base_dir = opendir(dir_name)))
  84.         return;
  85.     while(entry = readdir(base_dir))
  86.     {
  87.         filename = entry->d_name;
  88.         sprintf(complete_path,"%s/%s",dir_name,filename);
  89.         if(!strcmp(".",filename)||!strcmp("..",filename))
  90.             continue;
  91.  
  92.         test_dir = opendir(complete_path);
  93.         if(test_dir)
  94.         {
  95.             add_dir(complete_path);
  96.             closedir(test_dir);
  97.         }
  98.         else
  99.         {
  100.             add_file(complete_path);
  101.         }
  102.     }
  103.     closedir(base_dir);
  104. }
  105.  
  106.  
  107. void main(int argc, char* argv[])
  108. {
  109.     struct dirent     *dir_entry,*test_entry;
  110.     DIR        *base_dir,*test_dir;
  111.     struct dir_node *dir_ent;
  112.     struct file_node *file_ent;
  113.     char         string[256];
  114.  
  115.     if(!(base_dir = opendir("/home2")))
  116.         return;
  117.     while(dir_entry = readdir(base_dir))
  118.     {
  119.         sprintf(string,"/home2/%s/my_html",dir_entry->d_name);
  120.         if(test_dir = opendir(string))
  121.         {
  122.             split_dir(string);
  123.             closedir(test_dir);
  124.         }
  125.         
  126.     }
  127.     closedir(base_dir);
  128.  
  129.     while(dir_ll)
  130.     {
  131.         dir_ent = dir_ll;
  132.         dir_ll = dir_ll->next;
  133.         split_dir(dir_ent->name);
  134.         free(dir_ent);
  135.     }
  136.  
  137.     while(file_ll)
  138.     {
  139.         file_ent = file_ll;
  140.         printf("%s\n",file_ent->name);
  141.         file_ll = file_ll->next;
  142.         free(file_ent);
  143.     }
  144. }
  145.